package com.francis.springbootcommonutil.encry;

import org.apache.commons.codec.binary.Hex;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * MD5摘要算法，不可逆，速度极快
 */
public class Md5 {

    /**
     * md5 32
     *
     * @param str 加密串
     * @return String
     */
    public static String md5Hex(String str) {
        MessageDigest md5 = null;
        try {
            md5 = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        byte[] digest = md5.digest(str.getBytes());
        return new String(new Hex().encode(digest));
    }

    /**
     * md5 hash
     *
     * @param str       加密串
     * @param salt      盐值
     * @param hashTimes 加密次数
     * @return String
     */
    public static String md5Hash(String str, String salt, int hashTimes) {
        String hashResult;
        try {
            byte[] bytes = Md5Hash.md5HashByte(str, salt, hashTimes);
            hashResult = new String(bytes);
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
        return hashResult;
    }

    /**
     * md5 大写
     *
     * @param str 加密串
     * @return String
     */
    public static String md5Upper(String str) {
        return md5Hex(str).toUpperCase();
    }

}
